﻿using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Collections.Generic;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using Microsoft.Practices.ObjectBuilder;
using Bovespa.Infra.Web.Security;
using Bovespa.Infra.Web.UI;
using Bovespa.Infra.ExceptionHandling;
using Bovespa.Sinacor.BaseConhecimento.Shell.Presenters;
using Bovespa.Sinacor.BaseConhecimento.Shell.ArtigoProxy;

/// <summary>
/// Classe publica de manipulacao da pagina ResultadoPesquisa.aspx
/// </summary>
public partial class ResultadoPesquisa : BovespaPage<ResultadoPesquisaPresenter>, IResultadoPesquisa
{
    #region Campos

    #endregion

    #region Propriedades

    /// <summary>
    /// Retorna/Atribui valor para o presenter desta view.
    /// </summary>
    [CreateNew]
    public override ResultadoPesquisaPresenter Presenter
    {
        get { return this.BasePresenter; }
        set
        {
            this.BasePresenter = value;
            this.BasePresenter.View = this;
        }
    }

    #endregion

    #region Eventos

    /// <summary>
    /// Inicializa informacoes da ResultadoPesquisa, fazendo chamada ao presenter.
    /// </summary>
    /// <remarks>
    /// Este metodo e chamado automaticamente na primeira vez (apenas!) 
    /// que a ResultadoPesquisa e carregada.
    /// </remarks>
    protected override void InitializeView()
    {
        this.Presenter.OnViewInitialized();
    }

    /// <summary>
    /// Carrega informacoes iniciais da View e faz chamada ao presenter 
    /// </summary>
    /// <remarks>
    /// Este metodo e executado automaticamente toda vez que a ResultadoPesquisa (Pagina)
    /// e carregada.
    /// </remarks>
    protected override void LoadView()
    {
        this.Presenter.OnViewLoaded();
        if (!IsPostBack)
        {
            RetornarListaArtigos();
        }
    }

    #endregion

    #region Metodos Privados

    /// <summary>
    /// Busca uma lista de artigos, de acordo com o termo pesquisado.
    /// </summary>
    private void RetornarListaArtigos()
    {
        try
        {
            string termo = Request.QueryString["termo"].ToString();
            int pagina = Convert.ToInt32(Request.QueryString["pagina"]);

            ResultadoBuscaArtigo resultado = new ResultadoBuscaArtigo();

            resultado = this.Presenter.RetornarListaArtigos(termo, pagina, 10);

            if (resultado.Artigos != null)
            {
                this.RptResultado.DataSource = resultado.Artigos;
                this.RptResultado.DataBind();

                ((Literal)this.RptResultado.Controls[this.RptResultado.Controls.Count - 1].FindControl("LitPaginacao")).Text = resultado.TextoPaginacao;
                LblTermo.Text = string.Format("Você pesquisou pelo termo '<b>{0}</b>'.", termo);
            }
            else
            {
                LblMensagem.Text = "Não foram encontrados artigos com o termo informado!";
            }
            
        }
        catch (BusinessException buEx)
        {
            this.ShowMessage(buEx);
        }
        catch (Exception ex)
        {
            throw;
        }
    }

    #endregion

    #region IResultadoPesquisa Members

    #endregion
}


